home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / amok_lha / amok17.lha / GetiT-Zeiger / GetiTZeiger.mod < prev    next >
Text File  |  1993-08-15  |  5KB  |  128 lines

  1. MODULE GetiTZeiger;
  2.  
  3. (*---------------------------------------------------------------------------
  4.    :Programm.  GetiTZeiger
  5.    :Version.   1.0
  6.    :Contents.  Änderung der Workbenchfarben in die GetiT-Farben und zurück.
  7.    :Remark.    Start über Icon-File und 'DEFAULT TOOL'.
  8.    :History.   1.01, 15-Jan-89 Müll entfernt, optimiert.
  9.    :Author.    Jochen P. Kupfer
  10.    :Address.   Buchenweg 22, D-4006 Erkrath 2
  11.    :Phone.     02104-40673
  12.    :Remark.    SIGMA
  13.    :Date.      14-Jan-89
  14.    :Copyright. PD
  15.    :Language.  Modula-2
  16.    :Compiler.  M2Amiga v3.11d
  17. ---------------------------------------------------------------------------*)
  18.  
  19. (* Das Prg muß mit einem Icon von der Workbench zu starten.
  20.    Das Icon muß vom Typ 'Projekt' (wie z.B. bei Textfiles) sein.
  21.    Als 'DEFAULT TOOL' ist das eigentliche Programm 'GetiTZeiger'
  22.    einzutragen. Vorweg natürlich der richtige Pfad. Also z.B.
  23.    ':GetiTZeiger' oder ':c/GetiTZeiger'. Heißt das Iconfile z.B.
  24.    'NeuPrefs.info', dann steht im zugehörigen File 'NeuPrefs' nur
  25.    '-n<RETURN>' (bzw. '-a<RETURN>', wenn auf die ursprünglichen
  26.    Farben zurück geschaltet werden soll).                            *)
  27.  
  28. FROM Intuition   IMPORT Preferences, PreferencesPtr, pointerSize,
  29.                         GetPrefs, SetPrefs;
  30. FROM SYSTEM      IMPORT ADR;
  31. FROM Arts        IMPORT TermProcedure, Assert;
  32. FROM Arguments   IMPORT GetArg, NumArgs;
  33. FROM FileSystem  IMPORT Lookup, File, ReadBytes, Close,
  34.                         WriteBytes, Length, Response;
  35.  
  36. CONST
  37.   size0   = 3;   (* Filelänge! *)
  38.   altname = "Sys:devs/system-configuration";
  39.   neuname = ":devs/system-configuration";
  40.  
  41. VAR
  42.   pp1,pp2         :PreferencesPtr;
  43.   len, i, arg     :INTEGER;
  44.   buffer1,buffer2 :Preferences;
  45.   buffer          :ARRAY[0..15] OF CHAR;
  46.   argument        :ARRAY[0..30] OF CHAR;
  47.   name            :ARRAY[0..50] OF CHAR;
  48.   file,f0         :File;
  49.   new             :BOOLEAN;
  50.   size,actual     :LONGINT;
  51.  
  52.  
  53.  PROCEDURE Cleanup;  (* Falls das Prg aus irgendwelchen Gründen
  54.                         abgebrochen wird, müssen die offenen
  55.                         Files wieder geschlossen werden.               *)
  56.   BEGIN
  57.     Close(file);
  58.     Close(f0);
  59.   END Cleanup;
  60.  
  61.  
  62. BEGIN
  63.   TermProcedure(Cleanup);
  64.   pp1:=NIL;pp2:=NIL;actual:=0; (* Nur für alle Fälle...                 *)
  65.   new := FALSE;
  66.   size := SIZE(buffer1);
  67.   pp1 := PreferencesPtr(ADR(buffer1));
  68.   pp2 := PreferencesPtr(ADR(buffer2));
  69.   GetPrefs(pp1,size);arg:=1;    (* Aktuelle Prefs holen.                *)
  70.  
  71.   IF (NumArgs()#0) THEN
  72.      GetArg(arg,argument,len);  (* Tricky, tricky! Argument ist der Name(!)
  73.                                    des Files (=AltPrefs oder NeuPrefs).
  74.                                    Das eigentliche Argument (-a oder -n)
  75.                                    steckt im File selbst!!!!!
  76.                                    Das muß dann natürlich auch gelesen
  77.                                    und ausgewertet werden!              *)
  78.  
  79.     Lookup(f0,argument,size0,new); (* Datei zum Lesen/Schreiben öffnen. *)
  80.     Assert(f0.res=done,ADR("Icon-File nicht gefunden!"));
  81.     ReadBytes(f0,ADR(buffer),size0,actual);
  82.  
  83.     IF buffer[0]="-" THEN    (* Welcher Parameter?                      *)
  84.        IF buffer[1]="n" THEN name := neuname END;
  85.        IF buffer[1]="a" THEN name := altname END;
  86.     END;
  87.  
  88.     Close(f0);
  89.                                 (* Nun such sys.config!                 *)
  90.     Lookup(file,name,size,new); (* sys.config zum Lesen öffnen.         *)
  91.     Assert(file.res=done,ADR("Datenfile nicht gefunden!"));
  92.                          (* Abbruch, falls Datenfile nicht greifbar.    *)
  93.  
  94.     Length(file,actual); (* Zur Kontrolle erst nachsehen, wie lang
  95.                             das angegebene Datenfile tatsächlich ist!   *)
  96.  
  97.     actual:=actual-2;      (* SIZE(Preferences) + 2(!) = actual         *)
  98.  
  99.     Assert(size=actual,ADR(" Falsches Datenfile  gelesen! "));
  100.                          (* Sicherheitsabfrage, da das Programm,
  101.                             falls actual < size, auf die fehlenden
  102.                             Bytes wartet ... und wartet ... und wartet! *)
  103.  
  104.     ReadBytes(file,ADR(buffer2),size,actual);   (* sys.config lesen...  *)
  105.     Close(file);                                (* und schließen!       *)
  106.  
  107.     FOR i:=0 TO pointerSize-1 DO                (* Zeiger umbauen.      *)
  108.        pp1^.pointerMatrix[i] := pp2^.pointerMatrix[i];
  109.     END;
  110.  
  111.     pp1^.xOffset := pp2^.xOffset;  (* hot spot *)
  112.     pp1^.yOffset := pp2^.yOffset;
  113.  
  114.     pp1^.color17 := pp2^.color17;  (* Zeigerfarben *)
  115.     pp1^.color18 := pp2^.color18;
  116.     pp1^.color19 := pp2^.color19;
  117.  
  118.     pp1^.color0 := pp2^.color0;    (* Wb - Farben *)
  119.     pp1^.color1 := pp2^.color1;
  120.     pp1^.color2 := pp2^.color2;
  121.     pp1^.color3 := pp2^.color3;
  122.  
  123.     SetPrefs(pp1,size,new);
  124.  
  125.   END; (* IF *)
  126.  
  127. END GetiTZeiger.mod
  128.